﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace HMS
{
    public partial class ucDonvitiepnhan : UserControl
    {
        private string sGetID;
        private SqlConnection con = new SqlConnection(FRM_Manhinhchinh.sConn);
        private SqlDataAdapter dataAp;
        private int iIndex;
        private bool bUpdate, bCheckExist;
        private string sTenDV_old;
        private List<string> list;
        private SqlCommand cmdInsert, cmdUpdate;
        private DataTable dataTable;

        public ucDonvitiepnhan()
        {
            InitializeComponent();
            load_data();
        }// end

        // Load data lên gridDonVi
        public void load_data()
        {
            GetDataTable("select Department_ID , Department_Name,  Department_Status from tblDepartment where Kind_ID = '2'");
            gridDonVi.DataSource = dataTable;
        }// end load_data

        // Hàm lấy dữ liệu từ câu lệnh query sau đó gán vào datatable
        public DataTable GetDataTable(string sql)
        {
            // Tạo dataApdapter, thực hiện câu lệnh query
            dataAp = new SqlDataAdapter(sql, con);
            // Đổ dữ liệu vào DataTable
            dataTable = new DataTable();
            dataAp.Fill(dataTable);
            return dataTable;
        }// end

        // Gán dữ liệu từ CSDL lên giao diện
        public void Set_data()
        {
            iIndex = gridView1.FocusedRowHandle;
            sGetID = gridView1.GetRowCellValue(iIndex, "Department_ID").ToString();
            string sSQl = String.Format("select Department_ID, Department_Name, Department_Status from tblDepartment where Department_ID = '{0}'", sGetID);
            GetDataTable(sSQl);
            //Gán text cho textbox
            txtMadonvi.Text = dataTable.Rows[0]["Department_ID"].ToString();
            txtTendonvi.Text = dataTable.Rows[0]["Department_Name"].ToString();
            // Đọc từ DB set true, false cho nút check "Kích hoạt"
            if (dataTable.Rows[0]["Department_status"].ToString() == "True")
                ckKichhoat.Checked = true;
            else ckKichhoat.Checked = false;
        }// end Set_data

        // Làm mới nội dung textbox
        private void clear_Contents()
        {
            txtMadonvi.Text = "";
            txtTendonvi.Text = "";
            ckKichhoat.Checked = false;
        }// end clear_Contents

        // Event click cho nút Thêm đơn vị
        private void btnThemdonvi_Click(object sender, EventArgs e)
        {
            clear_Contents();
            txtMadonvi.Text = NextID();
            txtTendonvi.Enabled = true;
            ckKichhoat.Enabled = true;
            bUpdate = false;
            btnHuy.Enabled = true;
            btnLuu.Enabled = true;
        }// end btnThemdonvi_Click

        // Event click cho nút Cập nhật
        private void btnCapnhat_Click(object sender, EventArgs e)
        {
            Set_data(); // Gọi hàm gán dữ liệu từ CSDL lên giao diện
            txtTendonvi.Enabled = true;
            bUpdate = true;
            sTenDV_old = txtTendonvi.Text;
            btnLuu.Enabled = true;
            btnHuy.Enabled = true;
            ckKichhoat.Enabled = true;
        }// end btnCapnhat_Click

        // Event click cho gridDonVi
        private void gridDonVi_Click(object sender, EventArgs e)
        {
            // enable button
            txtTendonvi.Enabled = false;
            ckKichhoat.Enabled = false;
            btnLuu.Enabled = false;
            btnHuy.Enabled = false;
            Set_data(); // Gọi hàm gán dữ liệu từ CSDL lên giao diện
        }// end gridDonVi_Click

        // Kiểm tra phòng khám đã tồn tại trong CSDL
        private bool Check_Exist(string sTen)
        {
            GetDataTable("select * from tbldepartment where department_name = N'"
                + sTen + "' and kind_id = '2'");
            if (dataTable.Rows.Count == 0) bCheckExist = false;
            else bCheckExist = true;
            return bCheckExist;
        }// end Check_Exist

        // Mã tự động tăng hiện trên textbox
        private string NextID()
        {
            GetDataTable("select max(department_id) as department_id from tbldepartment where kind_id = '2'");
            string sMaPK = dataTable.Rows[0]["department_id"].ToString();
            return "D" + (int.Parse(sMaPK.Remove(0, 1)) + 1);
        }// end NextID()

        // Event click cho nút Lưu
        private void btnLuu_Click(object sender, EventArgs e)
        {
            if (txtMadonvi.Text == "" || txtTendonvi.Text == "")
                MessageBox.Show("Vui lòng nhập dữ liệu vào ô trống!", "Thông báo!", MessageBoxButtons.OK,MessageBoxIcon.Warning);
            else
            {
                // Khai báo biến
                list = new List<string>();
                string sMaDV = txtMadonvi.Text,
                        sTenDV = txtTendonvi.Text,
                        sStatus;
                // Trạng thái là tạo mới hay cập nhật
                switch (bUpdate)
                {
                    // Trạng thái tạo mới
                    case false:
                        SqlConnection conInsert = new SqlConnection(FRM_Manhinhchinh.sConn); // Tạo kết nối DB
                        if (ckKichhoat.Checked == true) sStatus = "True";
                        else sStatus = "False";
                        string sCmdInsertUnit = "insert into tblDepartment values ('','" + sMaDV + "',N'"
                            + sTenDV + "','2','" + sStatus + "','')";
                        if (Check_Exist(sTenDV) == false)
                        {
                            conInsert.Open(); // Mở kết nối DB
                            cmdInsert = new SqlCommand(sCmdInsertUnit, conInsert); // Câu lệnh Insert dữ liệu vào DB                    
                            cmdInsert.ExecuteNonQuery(); // Thực thi lệnh SqlCommand
                            conInsert.Close(); // Đóng kết nối DB
                            MessageBox.Show("Tạo mới đơn vị thành công !","Thông báo",MessageBoxButtons.OK,MessageBoxIcon.Warning);
                            load_data(); // Load lại data lên gridControl
                        }// end if
                        else MessageBox.Show("Đơn vị tiếp nhận đã tồn tại !","Thông báo",MessageBoxButtons.OK,MessageBoxIcon.Warning);
                        break;
                    //Trạng thái cập nhật.
                    case true:
                        SqlConnection conUpdate = new SqlConnection(FRM_Manhinhchinh.sConn); // Tạo kết nối DB
                        if (ckKichhoat.Checked == true) sStatus = "True";
                        else sStatus = "False";
                        string sCmdUpdateClinic = "update tblDepartment set Department_Name =N'" +
                            sTenDV + "', Department_Status = '" + sStatus
                            + "' where Department_ID = '" + sMaDV + "'";
                        if (Check_Exist(sTenDV) == false || sTenDV == sTenDV_old)
                        {
                            conUpdate.Open(); // Mở kết nối DB
                            cmdUpdate = new SqlCommand(sCmdUpdateClinic, conUpdate); // Câu lệnh Insert dữ liệu vào DB                    
                            cmdUpdate.ExecuteNonQuery(); // Thực thi lệnh SqlCommand
                            conUpdate.Close(); // Đóng kết nối DB
                            MessageBox.Show("Cập nhật đơn vị thành công !","Thông báo",MessageBoxButtons.OK,MessageBoxIcon.Information);
                            load_data(); // Load lại data lên gridControl
                        }// end if
                        else MessageBox.Show("Đơn vị tiếp nhận đã tồn tại !","Thông báo",MessageBoxButtons.OK,MessageBoxIcon.Warning);
                        break;
                }// end switch
            }// end else
        }// end btnLuu_Click

        // Event click cho nút Hủy
        private void btnHuy_Click(object sender, EventArgs e)
        {
            if (bUpdate == false)
            {
                DialogResult dr = MessageBox.Show("Bạn chắc chắn muốn hủy thao tác này ?", "Thông báo", MessageBoxButtons.YesNo);
                if (dr == DialogResult.Yes) btnThemdonvi_Click(null, null);
                else return;
            }// end if
            else
            {
                // Kiểm tra dữ liệu có thay đổi chưa
                DialogResult dr = MessageBox.Show("Bạn chắc chắn muốn hủy thao tác này ?", "Thông báo", MessageBoxButtons.YesNo);
                if (dr == DialogResult.Yes) btnCapnhat_Click(null, null);
                else return;
            }// end else
        }// end btnHuy_Click

        // Event double click cho gridDonVi
        private void gridDonVi_DoubleClick(object sender, EventArgs e)
        {
            btnCapnhat_Click(null, null);
        }

        private void gridView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
        {
            if (e.Column==sothutu)
            {
                e.DisplayText = (e.RowHandle + 1).ToString();
            }
        }// end gridDonVi_DoubleClick
    }// end
}// end namespace